
package com.beans;

import com.entidades.Usuarios;
import com.entidades.Ventasmesnegocio;
import com.entidades.Ventasnegocio;
import com.entidades.Ventasusuarionegocio;
import java.io.Serializable;  
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.primefaces.event.ItemSelectEvent;
import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;
  
import org.primefaces.model.chart.PieChartModel;  

@Named("chartB")
public class chartsBean implements Serializable  {  
  
    @PersistenceContext 
    private EntityManager em;
    
    //ventas de negocios: VN
    private PieChartModel pieModel;  
    private List<Ventasnegocio> vListaVN;
    private Ventasnegocio VNselected;
    
    //ventas usuarios negocio: VUN
    private CartesianChartModel categoryModel;  
    private List<Ventasusuarionegocio> vListaVUN;
    private Ventasusuarionegocio VUNselected;
    
    //ventas mes negocio: VMN
    private CartesianChartModel categoryModel2;  
    private List<Ventasmesnegocio> vListaVMN;
    
    private Ventasmesnegocio VMNselected;
  
    public CartesianChartModel getCategoryModel() {  
        System.out.println("Tamaño de category mdoel: " + categoryModel.getSeries().size() );
        return categoryModel;  
    }  

    public CartesianChartModel getCategoryModel2() {  
        System.out.println("Tamaño de category mdoel 2: " + categoryModel2.getSeries().size() );
        return categoryModel2;  
    }
    
    public Ventasnegocio getVNselected() {
        return VNselected;
    }

    public void setVNselected(Ventasnegocio VNselected) {
        this.VNselected = VNselected;
    }

    public PieChartModel getPieModel() {  
        return pieModel;  
    }  
  
    @PostConstruct
    private void init(){
        createPieModel();
        createCategoryModel();
        createCategoryModel2();
    }
    
    
    private void createPieModel() {  
        
        Query query = em.createNamedQuery("Ventasnegocio.findAll");
        vListaVN = query.getResultList();
        pieModel = new PieChartModel();  
        
        for(int i=0;i<vListaVN.size();i++){
            pieModel.set(vListaVN.get(i).getVnNegocio(), vListaVN.get(i).getVnNumCupones());
        }

    }
    
    public void itemSelect(ItemSelectEvent event) {  
            VNselected = vListaVN.get(event.getItemIndex());
    }
    
    
    private void createCategoryModel() {  
        categoryModel = new CartesianChartModel();  
        ChartSeries uneg = new ChartSeries();  
        ChartSeries uneg2 = new ChartSeries();  
        uneg2.setLabel("Ventas");
        uneg.setLabel("Cupones");
        
        Map sMap;
        sMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        Usuarios cu = (Usuarios) sMap.get("user");
  
        Query query = em.createNamedQuery("Ventasusuarionegocio.findByVunNegocio").setParameter("vunNegocio", cu.getUsuNegocio());
        //Query query = em.createNamedQuery("Ventasusuarionegocio.findAll");
        //Query query = em.createNativeQuery("SELECT * from bdagrupados.ventasusuarionegocio a where a.vun_negocio = " + cu.getUsuNegocio() + " order by a.vun_num_cupones desc", Ventasusuarionegocio.class);
        //query = em.createNativeQuery("SELECT * from bdagrupados.ventasusuarionegocio", Ventasusuarionegocio.class);
        vListaVUN = query.getResultList();
        
        for(int i=0;i<vListaVUN.size();i++){
            uneg.set(vListaVUN.get(i).getVunEmail() + " (" + vListaVUN.get(i).getVunUsuario() + ")", vListaVUN.get(i).getVunNumCupones().intValue());
            uneg2.set(vListaVUN.get(i).getVunEmail() + " (" + vListaVUN.get(i).getVunUsuario() + ")", vListaVUN.get(i).getVunNumVentas());
            System.out.println("set " +i + ".> " + vListaVUN.get(i).getVunEmail() + " (" + vListaVUN.get(i).getVunUsuario() + ")   -->>" + vListaVUN.get(i).getVunNumCupones().intValue());
        }
        categoryModel.addSeries(uneg); 
        categoryModel.addSeries(uneg2); 
        System.out.println("data de uneg: " + uneg.getData().toString() );
    }
    
    private void createCategoryModel2() {  
        categoryModel2 = new CartesianChartModel();  
        ChartSeries vmn = new ChartSeries();  
        ChartSeries vmn2 = new ChartSeries();  
        vmn2.setLabel("Ventas");
        vmn.setLabel("Cupones");
        
        List<Ventasmesnegocio> vListaVMNaux = new ArrayList<Ventasmesnegocio>();

        
        Map sMap;
        sMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        Usuarios cu = (Usuarios) sMap.get("user");
  
        Query query = em.createNamedQuery("Ventasmesnegocio.findByVpmNegocio").setParameter("vpmNegocio", cu.getUsuNegocio());
        vListaVMN = query.getResultList();
        //vListaVMNaux = vListaVMN;
        //recorre los ultimos 6 meses
        Calendar c1 = GregorianCalendar.getInstance();
        c1.setTime(new Date());
        //System.out.println("Fecha actual: " + c1.getTime().toLocaleString());
        //SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy");
        //System.out.println("Fecha Formateada: " + sdf.format(c1.getTime()));
        //System.out.println("Fecha Formateada: " + sdf.format(c1.getTime()));
        
        int i;
        int sw;
        Ventasmesnegocio nVmn;
        //vListaVMNaux = vListaVMN;
        //vListaVMNaux.clear();
        for(int f=0;f<6;f++){
            
            System.out.println("Fecha recuperada: " + c1.getTime());
            Integer fMes = c1.get(Calendar.MONTH)+1;
            System.out.println("Mes recuperado: " + fMes);
            sw=0;
            for(i=0;i<vListaVMN.size();i++){
                System.out.println("Comprobando mes: " + vListaVMN.get(i).getVpmMes().intValue() + " con mes: " + fMes);
                if(vListaVMN.get(i).getVpmMes().intValue()==fMes){
                    
                    //pone nombre del mes en castellano
                    vListaVMN.get(i).setVpmMesnombre(new SimpleDateFormat("MMMM").format(c1.getTime()));
                    vListaVMNaux.add(vListaVMN.get(i));
                    sw=1;
                }
            }
            if(sw==0){
                
                nVmn = new Ventasmesnegocio();
                nVmn.setVpmAno(BigInteger.valueOf(c1.get(Calendar.YEAR)));
                nVmn.setVpmMes(BigInteger.valueOf(c1.get(Calendar.MONTH)+1));
                nVmn.setVpmMesnombre(new SimpleDateFormat("MMMM").format(c1.getTime()));
                nVmn.setVpmNegocio(0);
                nVmn.setVpmNumCupones(BigInteger.valueOf(0));
                nVmn.setVpmNumVentas(0);
                vListaVMNaux.add(nVmn);
            }
            
            c1.add(Calendar.MONTH, -1);            
        }

        
        for(i=0;i<vListaVMNaux.size();i++){
            vmn.set(vListaVMNaux.get(i).getVpmMesnombre() + " " + vListaVMNaux.get(i).getVpmAno() , vListaVMNaux.get(i).getVpmNumCupones().intValue());
            vmn2.set(vListaVMNaux.get(i).getVpmMesnombre() + " " + vListaVMNaux.get(i).getVpmAno() , vListaVMNaux.get(i).getVpmNumVentas());
            System.out.println("set " +i + ".> " + vListaVMNaux.get(i).getVpmMesnombre() + " -->>" + vListaVMNaux.get(i).getVpmNumCupones().intValue());
        }
        categoryModel2.addSeries(vmn); 
        categoryModel2.addSeries(vmn2); 
        System.out.println("data de vmn: " + vmn.getData().toString() );
    }

    
}
